/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entity;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Administrateur
 */
@Entity
@Table(name = "produit")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Produit.findAll", query = "SELECT p FROM Produit p"),
    @NamedQuery(name = "Produit.findByIdproduit", query = "SELECT p FROM Produit p WHERE p.idproduit = :idproduit"),
    @NamedQuery(name = "Produit.findByPrix", query = "SELECT p FROM Produit p WHERE p.prix = :prix"),
    @NamedQuery(name = "Produit.findByRemise", query = "SELECT p FROM Produit p WHERE p.remise = :remise"),
    @NamedQuery(name = "Produit.findByStockInitial", query = "SELECT p FROM Produit p WHERE p.stockInitial = :stockInitial"),
    @NamedQuery(name = "Produit.findByStockActuel", query = "SELECT p FROM Produit p WHERE p.stockActuel = :stockActuel"),
    @NamedQuery(name = "Produit.findByStockNotification", query = "SELECT p FROM Produit p WHERE p.stockNotification = :stockNotification"),
    @NamedQuery(name = "Produit.findByNbVentes", query = "SELECT p FROM Produit p WHERE p.nbVentes = :nbVentes"),
    @NamedQuery(name = "Produit.findByIdDescription", query = "SELECT p FROM Produit p WHERE p.idDescription = :idDescription"),
    @NamedQuery(name = "Produit.findByIdTypeProdGenerique", query = "SELECT p FROM Produit p WHERE p.idTypeProdGenerique = :idTypeProdGenerique"),
    @NamedQuery(name = "Produit.findByIdTypeProdSpecifique", query = "SELECT p FROM Produit p WHERE p.idTypeProdSpecifique = :idTypeProdSpecifique"),
    @NamedQuery(name = "Produit.findByImage", query = "SELECT p FROM Produit p WHERE p.image = :image")})
public class Produit implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "idproduit")
    private Integer idproduit;
    @Basic(optional = false)
    @NotNull
    @Column(name = "prix")
    private double prix;
    @Basic(optional = false)
    @NotNull
    @Column(name = "remise")
    private int remise;
    @Basic(optional = false)
    @NotNull
    @Column(name = "stock_initial")
    private int stockInitial;
    @Basic(optional = false)
    @NotNull
    @Column(name = "stock_actuel")
    private int stockActuel;
    @Basic(optional = false)
    @NotNull
    @Column(name = "stock_notification")
    private int stockNotification;
    @Basic(optional = false)
    @NotNull
    @Column(name = "nb_ventes")
    private int nbVentes;
    @Basic(optional = false)
    @NotNull
    @Column(name = "idDescription")
    private int idDescription;
    @Basic(optional = false)
    @NotNull
    @Lob
    @Size(min = 1, max = 65535)
    @Column(name = "tags")
    private String tags;
    @Basic(optional = false)
    @NotNull
    @Column(name = "id_type_prod_generique")
    private int idTypeProdGenerique;
    @Column(name = "id_type_prod_specifique")
    private Integer idTypeProdSpecifique;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 200)
    @Column(name = "image")
    private String image;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idProduit")
    private Collection<ElementCommande> elementCommandeCollection;

    public Produit() {
    }

    public Produit(Integer idproduit) {
        this.idproduit = idproduit;
    }

    public Produit(Integer idproduit, double prix, int remise, int stockInitial, int stockActuel, int stockNotification, int nbVentes, int idDescription, String tags, int idTypeProdGenerique, String image) {
        this.idproduit = idproduit;
        this.prix = prix;
        this.remise = remise;
        this.stockInitial = stockInitial;
        this.stockActuel = stockActuel;
        this.stockNotification = stockNotification;
        this.nbVentes = nbVentes;
        this.idDescription = idDescription;
        this.tags = tags;
        this.idTypeProdGenerique = idTypeProdGenerique;
        this.image = image;
    }

    public Integer getIdproduit() {
        return idproduit;
    }

    public void setIdproduit(Integer idproduit) {
        this.idproduit = idproduit;
    }

    public double getPrix() {
        return prix;
    }

    public void setPrix(double prix) {
        this.prix = prix;
    }

    public int getRemise() {
        return remise;
    }

    public void setRemise(int remise) {
        this.remise = remise;
    }

    public int getStockInitial() {
        return stockInitial;
    }

    public void setStockInitial(int stockInitial) {
        this.stockInitial = stockInitial;
    }

    public int getStockActuel() {
        return stockActuel;
    }

    public void setStockActuel(int stockActuel) {
        this.stockActuel = stockActuel;
    }
    
    public void decStockActuel() {
        this.stockActuel--;
    }
    
    public void decStockActuel(int un) {
        this.stockActuel -= un;
    }

    public int getStockNotification() {
        return stockNotification;
    }

    public void setStockNotification(int stockNotification) {
        this.stockNotification = stockNotification;
    }

    public int getNbVentes() {
        return nbVentes;
    }

    public void setNbVentes(int nbVentes) {
        this.nbVentes = nbVentes;
    }

    public int getIdDescription() {
        return idDescription;
    }

    public void setIdDescription(int idDescription) {
        this.idDescription = idDescription;
    }

    public String getTags() {
        return tags;
    }

    public void setTags(String tags) {
        this.tags = tags;
    }

    public int getIdTypeProdGenerique() {
        return idTypeProdGenerique;
    }

    public void setIdTypeProdGenerique(int idTypeProdGenerique) {
        this.idTypeProdGenerique = idTypeProdGenerique;
    }

    public Integer getIdTypeProdSpecifique() {
        return idTypeProdSpecifique;
    }

    public void setIdTypeProdSpecifique(Integer idTypeProdSpecifique) {
        this.idTypeProdSpecifique = idTypeProdSpecifique;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    @XmlTransient
    public Collection<ElementCommande> getElementCommandeCollection() {
        return elementCommandeCollection;
    }

    public void setElementCommandeCollection(Collection<ElementCommande> elementCommandeCollection) {
        this.elementCommandeCollection = elementCommandeCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idproduit != null ? idproduit.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Produit)) {
            return false;
        }
        Produit other = (Produit) object;
        if ((this.idproduit == null && other.idproduit != null) || (this.idproduit != null && !this.idproduit.equals(other.idproduit))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entity.Produit[ idproduit=" + idproduit + " ]";
    }
    
}
